# 递增排序数组的一个旋转，输出数组的最小元素
# 这个题目直接排序肯定不是想要的，主要思路应该是利用有序数组反转这一条件将复杂度降低到对数
# 这题目关键在于左右怎么变。一般和右边比，右边的就不减而直接等于中间值，左边的就等于中间值+1。能够避免陷入死循环
# 直接记住算了
def minArray(numbers):
    right = len(numbers) - 1
    left = 0
    while right > left:
        mid = (right + left) // 2
        if numbers[mid] > numbers[right]:    # 最小值在右半部分
            left = mid + 1
        elif numbers[mid] < numbers[right]:    # 最小值左半部分
            right = mid
        else:   # 说明中间靠右或者靠左的都一样
            right = right - 1
            # 当然这个地方好像直接进行线性排序也可以
            # return min(numbers[left:right])
    return numbers[left]

if __name__ == '__main__':
    print(minArray([5,5,5]))